diff -ruN gtkwave-3.0.23/src/wavewindow.c gtkwave-3.0.23.pango/src/wavewindow.c
--- gtkwave-3.0.23/src/wavewindow.c	2006-11-11 04:41:57.000000000 +0000
+++ gtkwave-3.0.23.pango/src/wavewindow.c	2007-04-04 15:16:02.000000000 +0100
@@ -64,6 +64,9 @@
 GdkFont *wavefont=NULL;
 GdkFont *wavefont_smaller=NULL;
 
+PangoFontDescription *pfont =NULL;
+PangoLayout *layout = NULL;
+
 GtkWidget *wavearea=NULL;
 static GtkWidget *vscroll=NULL;
 static GtkWidget *hscroll=NULL;
@@ -402,10 +405,13 @@
         	        		xl, y, xl, y+5);
 				}
 
-			gdk_draw_string(wavepixmap, wavefont_smaller,
+			/*gdk_draw_string(wavepixmap, wavefont_smaller,
 				gc_mark,
 				xl-(gdk_string_measure(wavefont_smaller, nbuff)>>1), 
 				fontheight-2, nbuff);
+			pango_layout_set_text (layout, nbuff, -1);
+			gdk_draw_layout( wavepixmap, gc_mark, xl+100, fontheight-2 , layout); */
+
 			}
 		}
 	}
@@ -1274,7 +1280,14 @@
 
 gdk_draw_rectangle(signalpixmap, gc_dkgray, TRUE, 0, -1, signal_fill_width, fontheight); 
 gdk_draw_line(signalpixmap, gc_white, 0, fontheight-1, signal_fill_width-1, fontheight-1);
-gdk_draw_string(signalpixmap, signalfont, gc_black, 3+xsrc, fontheight-4, "Time");
+
+
+
+//gdk_draw_string(signalpixmap, signalfont, gc_black, 3+xsrc, fontheight-4, "Time");
+pfont = pango_font_description_from_string("Consolas 10");
+layout = gtk_widget_create_pango_layout (wavearea, "");
+pango_layout_set_text (layout, "Time", -1);
+gdk_draw_layout( signalpixmap, gc_black, 0, 1, layout);
 
 t=traces.first;
 trwhich=0;
@@ -1314,6 +1327,8 @@
 
 int RenderSig(Trptr t, int i, int dobackground)
 {
+pfont = pango_font_description_from_string("Consolas 10");
+layout = gtk_widget_create_pango_layout (wavearea, "");
 int texty, liney;
 int retval;
 char buf[65];
@@ -1366,43 +1381,55 @@
 			{
 			if(bufxlen)
 				{
-				int baselen=gdk_string_measure(signalfont, t->name);
-				int combined=baselen+bufxlen;
-
-				gdk_draw_string(signalpixmap,
+				pango_layout_set_text (layout, t->name, -1);
+				gdk_draw_layout( signalpixmap, gc_black, 1, texty-10, layout);
+				pango_layout_set_text (layout, buf, -1);
+				gdk_draw_layout( signalpixmap, gc_black, 1, texty-10, layout);
+				/*gdk_draw_string(signalpixmap,
 					signalfont,
 				        gc_black,
 				        left_justify_sigs?3:3+max_signal_name_pixel_width-
 						combined, 
-					texty,
+					texty-10,
 				        t->name);
 				gdk_draw_string(signalpixmap,
 					signalfont,
 				        gc_black,
 				        left_justify_sigs?3+baselen:3+max_signal_name_pixel_width-
 						bufxlen, 
-					texty,
-				        buf);
+					texty-10,
+				        buf);*/
 				}
 				else
 				{
-				gdk_draw_string(signalpixmap,
+				pango_layout_set_text (layout, t->name, -1);
+				gdk_draw_layout( signalpixmap, gc_black, 1, texty-10, layout);
+
+				/*gdk_draw_string(signalpixmap,
 					signalfont,
 				        gc_black,
 				        left_justify_sigs?3:3+max_signal_name_pixel_width-
 						gdk_string_measure(signalfont, t->name), 
-					texty,
-				        t->name);
+					texty-10,
+				        t->name);*/
 				}
 			}
 
-		if((t->asciivalue)&&(!(t->flags&TR_EXCLUDE)))
+		if((t->asciivalue)&&(!(t->flags&TR_EXCLUDE))){
+			int height,width;
+			pango_layout_get_pixel_size(layout, &width, &height);
+			//printf("wxh: %d %d\n", width, height);
+			pango_layout_set_text (layout, t->asciivalue, -1);
+			gdk_draw_layout( signalpixmap, gc_black, width+2, texty-10, layout);
+			/*
 			gdk_draw_string(signalpixmap,
 				signalfont,
 	        		gc_black,
 	        		max_signal_name_pixel_width+6,
-				texty,
+				texty-10,
 	        		t->asciivalue);
+			*/
+			}
 		}
 		else
 		{
@@ -1412,33 +1439,41 @@
 
 			if(bufxlen)
 				{
-				int baselen=gdk_string_measure(signalfont, t->name);
-				int combined=baselen+bufxlen;
+				pango_layout_set_text (layout, t->name, -1);
 
-				gdk_draw_string(signalpixmap,
+				gdk_draw_layout( signalpixmap, comment_color, 1, texty-10, layout);
+				pango_layout_set_text (layout, buf, -1);
+				gdk_draw_layout( signalpixmap, comment_color, 1, texty-10, layout);
+
+
+				/*gdk_draw_string(signalpixmap,
 					signalfont,
 				        comment_color,
 				        left_justify_sigs?3:3+max_signal_name_pixel_width-
 						combined, 
-					texty,
+					texty-10,
 				        t->name);
 				gdk_draw_string(signalpixmap,
 					signalfont,
 				        comment_color,
 				        left_justify_sigs?3+baselen:3+max_signal_name_pixel_width-
 						bufxlen, 
-					texty,
+					texty-10,
 				        buf);
+				*/
 				}
 				else
 				{
-				gdk_draw_string(signalpixmap,
+				pango_layout_set_text (layout, t->name, -1);
+				gdk_draw_layout( signalpixmap, comment_color, 1, texty-10, layout);
+				/*gdk_draw_string(signalpixmap,
 					signalfont,
 				        comment_color,
 				        left_justify_sigs?3:3+max_signal_name_pixel_width-
 						gdk_string_measure(signalfont, t->name), 
-					texty,
+					texty-10,
 				        t->name);
+				*/
 				}
 			}
 		}
@@ -1459,54 +1494,70 @@
 			{
 			if(bufxlen)
 				{
-				int baselen=gdk_string_measure(signalfont, t->name);
-				int combined=baselen+bufxlen;
-
-				gdk_draw_string(signalpixmap,
+				pango_layout_set_text (layout, t->name, -1);
+				gdk_draw_layout( signalpixmap, gc_white, 1, texty-10, layout);
+				pango_layout_set_text (layout, buf, -1);
+				gdk_draw_layout( signalpixmap, gc_white, 1,  texty-10, layout);
+				/*gdk_draw_string(signalpixmap,
 					signalfont,
 				        gc_white,
 				        left_justify_sigs?3:3+max_signal_name_pixel_width-
 						combined, 
-					texty,
+					texty-10,
 				        t->name);
 				gdk_draw_string(signalpixmap,
 					signalfont,
 				        gc_white,
 				        left_justify_sigs?3+baselen:3+max_signal_name_pixel_width-
 						bufxlen, 
-					texty,
-				        buf);
+					texty-10,
+				        buf);*/
 				}
 				else
 				{
-				gdk_draw_string(signalpixmap,
+				pango_layout_set_text (layout, t->name, -1);
+				gdk_draw_layout( signalpixmap, gc_white, 1, texty-10, layout);
+				/*gdk_draw_string(signalpixmap,
 					signalfont,
 				        gc_white,
 				        left_justify_sigs?3:3+max_signal_name_pixel_width-
 						gdk_string_measure(signalfont, t->name), 
-					texty,
+					texty-10,
 				        t->name);
+				*/
 				}
 			}
 
-		if((t->asciivalue)&&(!(t->flags&TR_EXCLUDE)))
+		if((t->asciivalue)&&(!(t->flags&TR_EXCLUDE))){
+			int height,width;
+			pango_layout_get_pixel_size(layout, &width, &height);
+			//printf("wxh: %d %d\n", width, height);
+			pango_layout_set_text (layout, t->asciivalue, -1);
+			gdk_draw_layout( signalpixmap, gc_white, width+2, texty-10, layout);
+			/*
 			gdk_draw_string(signalpixmap,
 		      	signalfont,
 		       	gc_white,
 		        max_signal_name_pixel_width+6,
-			texty,
+			texty-10,
 		        t->asciivalue);
+			*/
+			}
 		}
 		else
 		{
-		if(t->name)
-		gdk_draw_string(signalpixmap,
+		if(t->name){
+			pango_layout_set_text (layout, t->name, -1);
+			gdk_draw_layout( signalpixmap, (dobackground==2)?gc_ltgray:gc_dkgray, 1, texty-10, layout);
+		/*gdk_draw_string(signalpixmap,
 		      	signalfont,
 		        (dobackground==2)?gc_ltgray:gc_dkgray,
 		        left_justify_sigs?3:3+max_signal_name_pixel_width-
 				gdk_string_measure(signalfont, t->name), 
-			texty,
+			texty-10,
   		        t->name);
+		*/
+			}
 		}
 	} 
 
@@ -1956,6 +2007,7 @@
 /***********/
 
 
+pfont = pango_font_description_from_string("Consolas 8");
 DEBUG(printf("Ruler Start time: "TTFormat", Finish time: "TTFormat"\n",tims.start, tims.end));
 
 x=0;
@@ -1988,11 +2040,13 @@
 
 	if((x-lenhalf >= lastx) || (pixelsperframe >= 200))
 		{
-		gdk_draw_string(wavepixmap,
+		/*gdk_draw_string(wavepixmap,
 			wavefont,
 		       	gc_time,
 			x-lenhalf, wavefont->ascent-1,
-		        timebuff);
+		        timebuff);*/
+		pango_layout_set_text (layout, timebuff, -1);
+		gdk_draw_layout( wavepixmap, gc_time, x-lenhalf, wavefont->ascent-10 , layout);
 
 		lastx = x+lenhalf;
 		}
@@ -2253,11 +2307,14 @@
 				{
 				if((x1>=wavewidth)||(gdk_string_measure(wavefont, identifier_str)+vector_padding<=width))
 					{
-		                        gdk_draw_string(wavepixmap,
+		                        /*gdk_draw_string(wavepixmap,
 		                                wavefont,  
 		                                gc_value,  
 		                                x0+2,ytext,
 		                                identifier_str);
+					pango_layout_set_text (layout, identifier_str, -1);
+					gdk_draw_layout( wavepixmap, gc_value, x0+100, ytext , layout);*/
+
 					}
 				}
 			}
@@ -2759,11 +2816,14 @@
 
 		if((x1>=wavewidth)||(gdk_string_measure(wavefont, ascii)+vector_padding<=width))
 			{
-			gdk_draw_string(wavepixmap,
+			/*gdk_draw_string(wavepixmap,
 				wavefont,
 			       	gc_value,
 				x0+2,ytext,
 			        ascii);
+			pango_layout_set_text (layout, ascii, -1);
+			gdk_draw_layout( wavepixmap, gc_value, x0+2, ytext , layout);*/
+
 			}
 		else
 			{
@@ -2775,11 +2835,14 @@
 				*mod='+';
 				*(mod+1)=0;
 
-				gdk_draw_string(wavepixmap,
+				/*gdk_draw_string(wavepixmap,
 					wavefont,
 				       	gc_value,
 					x0+2,ytext,
 				        ascii);
+				pango_layout_set_text (layout, ascii, -1);
+				gdk_draw_layout( wavepixmap, gc_value, x0+2, ytext , layout);*/
+
 				}
 			}
 
@@ -3195,11 +3258,14 @@
 		ascii=convert_ascii(t,h);
 		if((x1>=wavewidth)||(gdk_string_measure(wavefont, ascii)+vector_padding<=width))
 			{
-			gdk_draw_string(wavepixmap,
+			/*gdk_draw_string(wavepixmap,
 				wavefont,
 			       	gc_value,
 				x0+2,ytext,
 			        ascii);
+			pango_layout_set_text (layout, ascii, -1);
+			gdk_draw_layout( wavepixmap, gc_value, x0+2, ytext , layout); */
+
 			}
 		else
 			{
@@ -3211,12 +3277,15 @@
 				*mod='+';
 				*(mod+1)=0;
 
-				gdk_draw_string(wavepixmap,
+				/*gdk_draw_string(wavepixmap,
 					wavefont,
 				       	gc_value,
 					x0+2,ytext,
 				        ascii);
+				pango_layout_set_text (layout, ascii, -1);
+				gdk_draw_layout( wavepixmap, gc_value, x0+2, ytext , layout);*/
 				}
+
 			}
 
 		}
